home *** CD-ROM | disk | FTP | other *** search
- /*
- * the class STAGE_BLOCK_CORE
- * Copyright (C) 1996, 1997 Kazutaka Hirata <khirata@jove.acs.unt.edu>
- */
-
- #include "../stdafx.h"
-
- #include "../common/bool.h"
-
- #include "stblock.h"
-
- STAGE_BLOCK_CORE::STAGE_BLOCK_CORE(const FLAG& block_layer, const XY& ac)
- : m_ac1(ac),
- m_mcur(m_ac1),
- m_done(false),
- m_block_layer(block_layer),
- m_moved(false),
- m_pc_old()
- {
- }
-
- STAGE_BLOCK_CORE::STAGE_BLOCK_CORE(const FLAG& block_layer, const XY& ac, const XY& pc_old)
- : m_ac1(ac),
- m_mcur(m_ac1),
- m_done(false),
- m_block_layer(block_layer),
- m_moved(true),
- m_pc_old(pc_old)
- {
- }
-
- STAGE* STAGE_BLOCK_CORE::init(KBAN_INFO& info, KBAN_DRAW& draw)
- {
- info.bCaptured() = true;
- if(info.bClipped()) {
- info.bClipped() = false;
- KBAN_DATA& kban_data = info.kban_data();
- KBAN_DATA kban_data_selected;
- kban_data.collect_selected_items(kban_data_selected);
- uint active_layer = info.active_layer().get();
- draw.draw_kban_data(kban_data_selected, active_layer);
- kban_data.unselect();
- }
- if(m_moved.get()) {
- mouse_move(info, draw, m_pc_old, 0);
- } else {
- m_mcur.redraw_cursor(draw);
- }
- return this;
- }
-
- STAGE* STAGE_BLOCK_CORE::redraw(KBAN_INFO& info, KBAN_DRAW& draw)
- {
- m_mcur.redraw_cursor(draw);
- return this;
- }
-
- STAGE* STAGE_BLOCK_CORE::mouse_move(KBAN_INFO& info, KBAN_DRAW& draw, const XY& pc, UINT nFlags)
- {
- m_moved.set(true);
- m_pc_old = pc;
-
- XY ac2;
- info.grid().xy_pc2ac(pc, ac2);
- m_mcur.draw_cursor(draw, ac2);
- return this;
- }
-
- STAGE* STAGE_BLOCK_CORE::mouse_left_up(KBAN_INFO& info, KBAN_DRAW& draw, const XY& pc, UINT nFlags)
- {
- XY ac2;
- info.grid().xy_pc2ac(pc, ac2);
-
- m_mcur.erase_cursor(draw);
-
- KBAN_DATA& kban_data = info.kban_data();
- if(m_block_layer.get()) {
- uint nLayer = info.active_layer().get();
- LAYER& layer = kban_data.primitive().layer(nLayer);
- layer.select_items_in_block(m_ac1, ac2);
- } else {
- kban_data.select_items_in_block(m_ac1, ac2);
- }
-
- KBAN_DATA kban_data_selected;
- kban_data.collect_selected_items(kban_data_selected);
- if(!kban_data_selected.empty()) {
- info.bSelected() = true;
- uint active_layer = info.active_layer().get();
- draw.draw_kban_data_target(kban_data_selected, active_layer);
- }
-
- info.new_state().set(true);
- if(m_block_layer.get()) {
- info.new_state_str() = "Block Layer";
- } else {
- info.new_state_str() = "Block";
- }
-
- m_done.set(true);
-
- return NULL;
- }
-
- STAGE* STAGE_BLOCK_CORE::mouse_right_up(KBAN_INFO& info, KBAN_DRAW& draw, const XY& pc, UINT nFlags)
- {
- return NULL;
- }
-
- void STAGE_BLOCK_CORE::end(KBAN_INFO& info, KBAN_DRAW& draw)
- {
- info.bCaptured() = false;
- if(!m_done.get()) {
- m_mcur.erase_cursor(draw);
- }
- }
-